/**
 * 【同步方法】深拷贝对象
 * @param obj 待拷贝的对象数据
 * @return 拷贝出的对象数据
 */
function objCopy(obj) {
    
    // 如果数据为空，直接返回null
    if (obj === null) { return null; }
    // 如果数据不是对象格式，直接返回原数据
    if (typeof(obj) != 'object') { return obj; }
    // 如果数据是时间格式，直接返回
    if (obj.constructor === Date) { return new Date(obj); }
    
    // 判断一个对象是否为数组
    let isArray = Array.isArray(obj);
    // 初始化结果数据 (如果是数组则初始化为数组，如果是对象则初始化为对象)
    let cloneObj = isArray ? [] : {};
    // 循环原始数据
    for (let key in obj)
    {
        // 节点 - 某项元素值
        let ele_row = obj[key];
        // 中转变量
        let transfer = null;
        
        // 如果节点数据 任然是object数据格式
        if ( (typeof(ele_row)=='object' || typeof(ele_row)=='function') && ele_row!==null)
        {
            // 递归自身
            transfer = objCopy(ele_row);
        }
        // 否则直接赋值
        else { transfer = ele_row; }
        
        // 中转变量 赋值给 结果
        cloneObj[key] = transfer;
    }
    
    // 返回结果数据
    return cloneObj;
}

export default objCopy;